/**
 * 路径规划节点类
 */
class Node {
    constructor(point, parentNode, endNode) {
        // 起点到当前点实际距离
        this.g = parentNode ? parentNode.g + point.distance(parentNode.point) : 0
        // 当前点到终点的估算距离
        this.h = endNode ? point.distance(endNode.point) : 0
        // 估算总距离
        this.f = this.g + this.h
        // 父节点
        this.parent = parentNode
        // 经纬度
        this.point = point
    }

    /**
     * 更新父节点
     * @param newParentNode 新父节点
     */
    updateParent(newParentNode) {
        let distance = this.point.distance(newParentNode.point)
        if (this.g > newParentNode.g + distance) {
            this.g = newParentNode.g + distance
            this.f = this.g + this.h
            this.parent = newParentNode
        }
    }

    /**
     * 遍历所有的父节点，获取完整路径
     * @returns [Point] 路径
     */
    getPath() {
        if (this.parent) {
            let arr = this.parent.getPath()
            arr.push(this.point)
            return arr
        }
        return [this.point]
    }
}

module.exports = Node;